<?php
namespace Admin\Controller;
use Think\Controller;
use Think\Exception;
/*
 * 极光推送控制器
 * 
 */
  class ApppushController extends CommonController {
  	public function index(){
  		$this->display();
  	}
	
	public function push (){
		$data = $_POST;
		
		if(!$data['msg']||trim($data['msg'])==''){
			return	apiShow('消息内容不可为空',110);
		}
		if(!$data['title']||trim($data['title'])==''){
			return	apiShow('消息标题不可为空',110);
		}
		if(!$data['pushto']||trim($data['pushto'])==''){
			return apiShow('没有选择推送对象');
		}
		$pushTo = array($data['pushto']);
		if($data['pushto']=='all'){
			$pushTo = array('ios', 'android');
		}
		$time_to_live = $data['time_to_live'] ? $data['time_to_live'] :3600;
		
		require __ROOT__.'/jpush/config.php';
		try {
		    $response = $client->push()
		        ->setPlatform($pushTo)
		        // 一般情况下，关于 audience 的设置只需要调用 addAlias、addTag、addTagAnd  或 addRegistrationId
		        // 这四个方法中的某一个即可，这里仅作为示例，当然全部调用也可以，多项 audience 调用表示其结果的交集
		        // 即是说一般情况下，下面三个方法和没有列出的 addTagAnd 一共四个，只适用一个便可满足大多数的场景需求
		
//		         ->addAlias('alias')
//		        ->addTag(array('tag1', 'tag2'))
		        // ->addRegistrationId($registration_id)
//		                发送对象
				->addAllAudience()
//				基本消息内容
		        ->setNotificationAlert($data['msg'])
//				苹果端设置
		        ->iosNotification($data['msg'], array(
		            'sound' => 'sound.caf',
		            // 'badge' => '+1',
		            // 'content-available' => true,
		            // 'mutable-content' => true,
		            'category' => 'jiguang',
		            'extras' => array(
		                'key' => 'value',
		                'jiguang'
		            ),
		        ))
//				安卓端设置
		        ->androidNotification($data['msg'], array(
		            'title' => $data['title'],
		            // 'build_id' => 2,
		            'extras' => array(
		                'key' => 'value',
		                'jiguang'
		            ),
		        ))
				
//				长文本消息
//		        ->message('message content', array(
//		            'title' => 'hello jpush',
//		            // 'content_type' => 'text',
//		            'extras' => array(
//		                'key' => 'value',
//		                'jiguang'
//		            ),
//		        ))
//				推送设置
		        ->options(array(
		            // sendno: 表示推送序号，纯粹用来作为 API 调用标识，
		            // API 返回时被原样返回，以方便 API 调用方匹配请求与返回
		            // 这里设置为 100 仅作为示例
		
		            // 'sendno' => 100,
		
		            // time_to_live: 表示离线消息保留时长(秒)，
		            // 推送当前用户不在线时，为该用户保留多长时间的离线消息，以便其上线时再次推送。
		            // 默认 86400 （1 天），最长 10 天。设置为 0 表示不保留离线消息，只有推送当前在线的用户可以收到
		            // 这里设置为 1 仅作为示例
		
		             'time_to_live' => $time_to_live,
		
		            // apns_production: 表示APNs是否生产环境，
		            // True 表示推送生产环境，False 表示要推送开发环境；如果不指定则默认为推送生产环境
		
		            'apns_production' => true,
		
		            // big_push_duration: 表示定速推送时长(分钟)，又名缓慢推送，把原本尽可能快的推送速度，降低下来，
		            // 给定的 n 分钟内，均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
		            // 这里设置为 1 仅作为示例
		
		            // 'big_push_duration' => 1
		        ))
		        ->send();
		        if($response['http_code']==200){
				 	return	apiShow('推送成功',200,$response['body'] );
		        }else{
		        	return apiShow('推送失败',100,json_encode($response));
		        }
		        
		
		} catch (\JPush\Exceptions\APIConnectionException $e) {
		    // try something here
			$result = array(
				'code' => 100,
				'status'=>false,
				'msg'=>'极光推送服务器连接失败！',
				'data'=>$e,
			);
			apiShow('极光推送服务器连接失败!',102,$e);
//			echo json_encode($result);
		} catch (\JPush\Exceptions\APIRequestException $e) {
		    // try something here
			$result = array(
				'code'=>101,
				'status'=>false,
				'msg'=>'消息推送失败',
				'data'=>$e,
			);
			apiShow('消息推送失败',101,$e);
//			echo json_encode($result);
		}
		
		}

  }




